package com.ywk.base.designPattern.single;

/**
 * @Author zbh
 * @Date 2023/2/2
 */
public class SingleTest {

//    private static final SingleTest singleTest=new SingleTest();//第一种方式：启动的时候就创建，浪费资源（饿汉式）

//    private static SingleTest singleTest;//第二种方式：线程不安全（懒汉式）

    private static volatile SingleTest singleTest;//第五种方式：synchronized双重检查+volatile
    private SingleTest(){}

    public static /*synchronized*/ SingleTest getInstance(){//第三种：方法上加锁（缺点：锁的力度太大）
        if (null==singleTest) {//第四种：synchronized双重检查（在超高并发下有可能也会有问题，指令重排造成的问题），
            synchronized (SingleTest.class) {
                if (null == singleTest) {
                    singleTest = new SingleTest();
                }
            }
        }
        return singleTest;
    }
}
